package com.ljx.reflect.reflect04;

import java.lang.reflect.Method;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/10/27 16:29
 * @Version 1.0
 */
public class Test02 {
	public static void main(String[] args) throws Exception{
		// 获取class 对象
		Class<Zzs> zzsClass = Zzs.class;
		// 通过方法名和参数获取本类中指定的方法对象
		Method a = zzsClass.getDeclaredMethod("a",String.class);


		// 互殴去本类中所有方法
		Method[] declaredMethods = zzsClass.getDeclaredMethods();
		for (Method declaredMethod : declaredMethods) {

		}

		// 获取本类以及父类中指定public方法对象
		Method doSome = zzsClass.getMethod("doSome",String.class);


		// 获取本类以及父类中public方法对象
		Method[] methods = zzsClass.getMethods();
		for (Method method : methods) {

		}


		// 在具有指定的方法对象上调用invoke() ,此方法对象表示底层方法
		Zzs zzs = zzsClass.newInstance();
		Method a1 = zzsClass.getDeclaredMethod("a", String.class);
		Object aaaa = a1.invoke(zzs, "aaaa");
		System.out.println(aaaa);
	}
}

class Hns{
	public void doSome(String address){}
	private void doOther(){}
}

class Zzs extends Hns{
	public String a(String name){
		System.out.println(name);
		return name;
	}

	private void b(Integer age){
		System.out.println(age);
	}
}